package p3.ejemplos;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;

import p3.IHandler;

public class FileRequestHandler implements IHandler {
	
	protected Socket connection;

	
	/**
	 * Crea un nuevo manejador. 
	 * Para que se ejecute el servicio es necesario asignarle un socket 
	 * mediante setClientSocket.
	 */
	public FileRequestHandler(){
		
	}
	
	
	/**
	 * Crea un manejador para la conexión.	 
	 *  
	 * @param socketToHandle socket conectado al cliente.
	 */
	public FileRequestHandler(Socket socketToHandle){
		connection = socketToHandle;
	}
	
	/**
	 * Fija el socket por el que se manejara la conexión con el cliente.
	 * @param s socket que se conecta con el cliente (devuelto en una llamada accept).
	 */
	public void setHandlerSocket(Socket s){
		connection = s;
	}

	@Override
	public void doService() {
		if (connection == null){
			System.out.println("ConnectionHandler: Error. Socket cliente no inicializado.");
			return;
		}
		try{
            OutputStream outStrm = connection.getOutputStream();
            InputStream  inStrm  = connection.getInputStream();
            
            // Stream para leer del socket.
            BufferedReader streamReader = new BufferedReader(new InputStreamReader(inStrm));
            
            // Stream para escribir en el socket.
            PrintWriter streamWriter = new PrintWriter(outStrm);
            
            // Obtenemos nombre del fichero a descargar.
            String fileName = streamReader.readLine();
            
            // Creamos stream para leer del fichero
            BufferedReader fileReader = new BufferedReader(new FileReader(fileName));
            
            // Leemos l�neas del fichero y las escribirmos en el socket.
            String line = null;
            while((line = fileReader.readLine()) != null){
            	streamWriter.println(line);
               	streamWriter.flush();
            	Thread.sleep(200);
            }
            fileReader.close();
            streamWriter.close();
            streamReader.close();	
		} catch(IOException ioe){
			System.out.println("handleConnection: " + ioe.getMessage());				
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
        try {
			connection.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}
